﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using Distrackting.DataLayer;
using Distrackting.BusinessLayer;
using System.Collections.Generic;
using Microsoft.Live.ServerControls.VE;

namespace Distrackting.PresentationLayer
{
    public partial class AdicPerc : System.Web.UI.Page
    {


        protected void Page_Load(object sender, EventArgs e)
        {

            
            if (Session["user_guid"] == null)
            {
                Mensagens.AdicionarErro("Para ver esse recurso é necessário estar autenticado.");
                Response.Redirect(ResolveUrl("Public.aspx"));
            }
            else
            {
                if (!IsPostBack)
                {
                    Session["duplicado"] = false;
                    Session.Remove("linha");
                    Calendar1.SelectedDate = System.DateTime.Now;
                }
            }
        }

        private bool todasPreenchidas()
        {
            return (DropDown_chegada.SelectedIndex != 0) && (DropDown_partida.SelectedIndex != 0) && (DropDownAmbito.SelectedIndex != 0) &&
                (DropDownDesnivel.SelectedIndex != 0) && (DropDownDif.SelectedIndex != 0) && (DropDownEntidade.SelectedIndex != 0) &&
                (DropDownEpoca.SelectedIndex != 0) && (DropDownTipo.SelectedIndex != 0);
        }

        protected void Gravar_Click(object sender, EventArgs e)
        {
            try
            {
                if (todasPreenchidas())
                {
                    #region dropdowns
                    Guid cod_partida;
                    if (DropDown_partida.SelectedIndex != 1) cod_partida = new Guid(DropDown_partida.SelectedValue.ToString());
                    else
                    {
                        cod_partida = GerirLocalidade.inserirLocalidade(TextBoxNovaLocalParti.Text);
                    }
                    Guid cod_chegada;
                    if (DropDown_chegada.SelectedIndex != 1) cod_chegada = new Guid(DropDown_chegada.SelectedValue.ToString());
                    else
                    {
                        cod_chegada = GerirLocalidade.inserirLocalidade(TextBoxNovaLocalChegada.Text);
                    }
                    Guid cod_entidade;
                    if (DropDownEntidade.SelectedIndex != 1) { cod_entidade = new Guid(DropDownEntidade.SelectedValue); }
                    else
                    {
                        String entidade = TextBoxNovaEntidade.Text;
                        String url = TextBoxWebSite.Text;
                        String email = TextBoxEmail.Text;
                        cod_entidade = GerirEntidadeResponsavel.inserirEntidadeResponsavel(entidade, email, url);
                    }
                    #endregion

                    int duracao = Convert.ToInt32(Text_Duracao.Text);
                    Guid epoca = new Guid(DropDownEpoca.SelectedValue);
                    Guid ambito = new Guid(DropDownAmbito.SelectedValue);
                    Guid desnivel = new Guid(DropDownDesnivel.SelectedValue);
                    Guid dificuldade = new Guid(DropDownDif.SelectedValue);
                    Guid tipo = new Guid(DropDownTipo.SelectedValue);
                    String descricao = Text_Descricao.Text;
                    DateTime data = Calendar1.SelectedDate;
                    String nome = textbox_nome.Text;
                    Guid utilizador = new Guid(Session["user_guid"].ToString());

                    #region pontos_e_distancia
                    List<Ponto> pontos = new List<Ponto>();
                    List<LatLongWithAltitude> latlngs = ((Shape)Session["linha"]).Points;
                    int i = 0;
                    foreach (LatLongWithAltitude ll in latlngs)
                    {
                        i++;
                        Ponto pt = new Ponto();
                        pt.lat = Convert.ToSingle(ll.Latitude);
                        pt.lng = Convert.ToSingle(ll.Longitude);
                        pt.ordem = i;
                        pontos.Add(pt);
                    }
                    float distancia = GerirPercursos.calcularDistanciaTotal(pontos);
                    #endregion

                    Guid cod_perc = GerirPercursos.criaPercurso(nome, utilizador, cod_partida, cod_chegada, distancia, duracao, epoca, ambito, desnivel, cod_entidade, dificuldade, tipo, descricao, data, pontos);
                    Response.Redirect(ResolveUrl("VerPerc.aspx?perc={" + cod_perc.ToString() + "}"));
                }
            }
            catch (System.Exception exc)
            {
                Mensagens.AdicionarErro(exc.Message);
            }
            
        }

        protected void DropDown_partida_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (DropDown_partida.SelectedIndex == 1)
            {
                Panel2.Visible = true;
            }
            else Panel2.Visible = false;
        }

        protected void DropDownEntidade_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (DropDownEntidade.SelectedIndex == 1)
            {
                PanelEntidade.Visible = true;
            }
            else PanelEntidade.Visible = false;
        }

        protected void DropDown_chegada_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (DropDown_chegada.SelectedIndex == 1)
            {
                Panel3.Visible = true;
            }
            else Panel3.Visible = false;
        }

        protected void Map1_ServerClick(object sender, MapEventArgs e)
        {
            if (e.rightMouseButton)
            {
                bool duplicado = (bool)Session["duplicado"];
                if (duplicado == false)
                {
                    if (Session["linha"] == null)
                    {
                        Shape linha = new Shape();
                        linha.Type = ShapeType.Polyline;
                        linha.HideIcon();
                        linha.LineColor = new Color(255, 0, 0, 1);
                        linha.Points.Add(new LatLongWithAltitude(e.latLong.Latitude, e.latLong.Longitude));
                        Session.Add("linha", linha);
                    }
                    else
                    {
                        Shape linha = (Shape)Session["linha"];
                        linha.Points.Add(new LatLongWithAltitude(e.latLong.Latitude, e.latLong.Longitude));
                        Map1.DeleteAllShapes();
                        Map1.AddShape(linha);
                    }
                    Session["duplicado"] = true;
                }
                else Session["duplicado"] = false;

            }
        }

        /*protected void Calendar1_SelectionChanged(object sender, EventArgs e)
        {
            data = this.Calendar1.SelectedDate;
            TextBox1.Text = Calendar1.SelectedDate.ToShortDateString();
        }*/
    }
}
